Amazon Connect Streamsを使ってカスタムエージェントステータス名を取得する方法
Amazon ConnectのCCP上で選択できるエージェントステータスですが、
デフォルトでは Available(受付可)
と Offline(オフライン)
があります。
その他に、通話が終了すると自動的に ACW(後処理)
ステータスになりますが、離席や後処理ステータスも設定できるようにしたい場合は、このように追加することが可能です。
ただし、画面上にも書かれている通り、追加したステータスは削除できないので注意が必要ですが。。
追加したカスタムエージェントステータスは、CCP上で選択できるようにしたり、非表示にしたりすることができ、更にはAmazon Connect Streamsを使ってCCPをカスタマイズすることで、エージェントステータスに応じてアプリケーションの動作を制御するといったことが可能になります。
今回はAmazon Connect Streamsを使ってカスタムエージェントステータスを取得する方法について書きます。
Amazon Connect Streamsのセットアップ
このあたりに、いくつか方法が記載されておりますが、とりあえず試すだけでしたらGithub上でZIPファイルをダウンロードして release
フォルダの中にある connect-streams-min.js
か connect-streams.js
を参照すれば使えるようになります。
エージェントステータスを取得する方法
まず、エージェントに関するイベントをサブスクライブする必要があるため、 connect.agent()
メソッドを使います。
https://github.com/amazon-connect/amazon-connect-streams/blob/master/Documentation.md#connectagent
次に Agent API
でエージェントステータスが取得できそうなものを探します。
https://github.com/amazon-connect/amazon-connect-streams/blob/master/Documentation.md#agent-api
結論:agent.onStateChange イベントをサブスクライブすれば取得可能
agent.onStateChange
イベントによって oldState(変更前のステータス)
と newState(変更後のステータス)
が取得できます。
connect.agent(function(agent) { agent.onStateChange(function(agentStateChange) { alert("agentStateChange.oldState=" + agentStateChange.oldState); alert("agentStateChange.newState=" + agentStateChange.newState); }); });
例えば私の環境を例にしますと、このように取得できます。 デフォルト、カスタムともにステータス名を取得できますので、あとは取得結果によってアプリケーションロジックを組めば良いということになります。
agentStateChange.oldState=Available agentStateChange.newState=ACW
agentStateChange.oldState=ACW agentStateChange.newState=Training
agentStateChange.oldState=Training agentStateChange.newState=Available
agentStateChange.oldState=Available agentStateChange.newState=ReasonCode3
agentStateChange.oldState=ReasonCode3 agentStateChange.newState=ReasonCode1
ただし、いくつか補足したいと思うことがありますので、下記に書いてブログを終ろうと思います。
エージェントのステータス取得に関する補足事項
agent.onXXXXX イベントで取得しようとすると、どうなるか?
エージェントの状態が、 受付可
、 受付可以外
、 オフライン
、 後処理(Amazon Connectで用意されてるもの)
になった場合に発生するイベントがあります。
agent.onRoutable()
イベント- エージェントが受付可になった時に発生するイベント
agent.onNotRoutable()
イベント- エージェントが受付可以外のステータスになった時に発生するイベント
agent.onOffline()
イベント- エージェントがオフラインのステータスになった時に発生するイベント
agent.onAfterCallWork()
イベント- エージェントがオフラインのステータスになった時に発生するイベント
このように各イベントをサブスクライブして、 agent.getState()
メソッドを使うことでエージェントステータス名を取得することができます。
connect.agent(function(agent) { agent.onRoutable(function(agent) { var state = agent.getState(); alert("state.name=" + state.name); }); agent.onNotRoutable(function(agent) { var state = agent.getState(); alert("state.name=" + state.name); }); agent.onOffline(function(agent) { var state = agent.getState(); alert("state.name=" + state.name); }); agent.onAfterCallWork(function(agent) { var state = agent.getState(); alert("state.name=" + state.name); }); }
このような結果を得られます。
onNotRoutable →state.name=Training
onOffline →state.name=Offline
onRoutable →state.name=Available
onAfterCallWork →state.name=AfterCallWork
ただし、これらのイベントはステータスが変わらないと発生しません。つまり、 カスタムエージェントステータスからカスタムエージェントステータスへの変更は、 onNotRoutable
な状態から変わっていないため、最初のカスタムエージェントステータスへの変更の時だけイベントが発生します。
agent.onStateChange イベントで取得できるエージェントステータスは?
というわけで、結論に書いた通り agent.onStateChange
イベントを使うことになるのですが、どのようなステータスが取得できるのか確認しました。
発信の場合(発信先が着信拒否した)
onStateChange agentStateChange.oldState=Available ←受付可能 agentStateChange.newState=CallingCustomer ←発信した onStateChange agentStateChange.oldState=CallingCustomer ←発信した agentStateChange.newState=FailedConnectCustomer ←発信先が着信拒否した
発信の場合(発信側で切断した)
onStateChange agentStateChange.oldState=Available ←受付可能 agentStateChange.newState=CallingCustomer ←発信した onStateChange agentStateChange.oldState=CallingCustomer ←発信した agentStateChange.newState=FailedConnectAgent ←発信側で切断した
着信の場合(着信して応答した)
onStateChange agentStateChange.oldState=Available ←受付可能 agentStateChange.newState=PendingBusy ←着信中 onStateChange agentStateChange.oldState=PendingBusy ←着信中 agentStateChange.newState=Busy ←応答後の状態
着信の場合(着信したが、発信側に切断された(応答できなかった))
onStateChange agentStateChange.oldState=Available ←受付可能 agentStateChange.newState=PendingBusy ←着信中 onStateChange agentStateChange.oldState=PendingBusy ←着信中 agentStateChange.newState=MissedCallAgent ←発信側で切断した
このようにエージェントステータスには呼に関するものも含まれますので、アプリケーション側で個々のイベントをハンドリングしていくことになります。
呼に関するイベントもいろいろとありますので、今後取り上げてみたいと思います。